/*
 * main.js 는 background.html에서 실행되는 메인 스크립트 입니다. 
 */

var settings = {
	cts : undefined,

	getContacts : function() {
		// 초기 환경 설정
		if (!this.cts) {
			var exp = window.localStorage.getItem("contacts");
			if (exp) {
				this.cts = eval(exp);
				console.log("로컬 스토리지로 부터 연락처 읽어 들임.");
			}

			else {
				this.cts = new Array();
				this.cts[0] = {
					name : "지율",
					email : "jeeeyul@gmail.com"
				};
				console.log("초기 연락처 생성 됨.");
			}
		}

		return this.cts;
	},

	save : function() {
		if (this.cts) {
			var exp = JSON.stringify(this.cts);
			window.localStorage.setItem("contacts", exp);
			console.log(exp);
			console.log("연락처 저장됨.");
		}
	}
};

/**
 * 디폴트 커맨드.
 */
var defaultCommand;

/**
 * 디폴트 커맨드가 전달 되었을 때 수행해야 할 실제 커맨드.
 */
var commandForDefaultCommand;

var currentSearchWord;

/**
 * 기본 검색 결과를 업데이트 합니다.
 * 
 * @param text
 *            사용자가 입력중인 문자열.
 */
function updateDefaultSuggestionAsFindAndSendMail(text) {
	text = text.trim();
	var length = text.length;
	var cc = text.charCodeAt(length - 1);
	if (KLT.isCompletedKoreanCharacterCode(cc)) {
		if (KLT.getJongsung(cc)) {
			chrome.omnibox.setDefaultSuggestion({
				description : chrome.i18n.getMessage("findAndSendMail1", "%s")
			});
		} else {
			chrome.omnibox.setDefaultSuggestion({
				description : chrome.i18n.getMessage("findAndSendMail2", "%s")
			});
		}
	} else {
		chrome.omnibox.setDefaultSuggestion({
			description : chrome.i18n.getMessage("findAndSendMail2", "%s")
		});
	}
}

/**
 * 디폴트 커맨드를 변경합니다.
 * 
 * @param description
 *            화면에 보일 레이블.
 * @param command
 *            디폴트 커맨드가 선택되었을 때 실제 수행될 커맨드.
 */
function setDefaultCommand(description, command) {
	commandForDefaultCommand = command;
	chrome.omnibox.setDefaultSuggestion({
		"description" : description
	});
}

/**
 * 메일 보내기
 * 
 * @param to
 *            메일 수신자 이메일 주소.
 */
function sendMail(to) {
	var url = "https://mail.google.com/mail/?extsrc=mailto&url=";
	url += "mailTo:" + encodeURIComponent(to);
	chrome.tabs.create({
		"url" : url
	});
}

/**
 * 옵션 페이지를 열어 보여줍니다.
 */
function showOptionTab() {
	chrome.tabs.create({
		url : chrome.extension.getURL("options.html")
	});
}

/**
 * 옴니 박스에 사용자가 문자를 입력했을 때 콜백.
 */
chrome.omnibox.onInputChanged.addListener(function(text, suggest) {
	defaultCommand = text;

	var s = new Array();

	var cts = settings.getContacts();
	for ( var i in cts) {
		var matchName = cts[i].name.serialize().indexOf(text.serialize());
		var matchEmail = cts[i].email.serialize().indexOf(text.serialize());

		if (matchName < 0 && matchEmail < 0) {
			continue;
		}

		var eachSuggest = {
			"content" : cts[i].email,
			"description" : chrome.i18n.getMessage("sendMail", [ cts[i].name,
					cts[i].email ])
		};
		s.push(eachSuggest);
	}

	// 검색 결과가 하나인 경우
	if (s.length === 1) {
		setDefaultCommand(s[0].description, s[0].content);
		s = new Array();

		text = text.trim();
		var length = text.length;
		var cc = text.charCodeAt(length - 1);
		var searchDesc;
		if (KLT.isCompletedKoreanCharacterCode(cc)) {
			if (KLT.getJongsung(cc)) {
				searchDesc = chrome.i18n.getMessage("findAndSendMail1", text);
			} else {
				searchDesc = chrome.i18n.getMessage("findAndSendMail2", text);
			}
		} else {
			searchDesc = chrome.i18n.getMessage("findAndSendMail2", text);
		}

		s.push({
			content : "find:" + text,
			description : searchDesc
		});

		console.log(text + " : " + searchDesc);
	}

	// 검색 결과가 복수인 경우
	else if (s.length > 1 || s.length === 0) {
		updateDefaultSuggestionAsFindAndSendMail(text);
		commandForDefaultCommand = "find:" + text;
	}

	s.push({
		content : "option",
		description : chrome.i18n.getMessage("option")
	});

	suggest(s);
});

/**
 * 사용자가 옴니박스에서 엔터키를 눌렀을 때 콜백 됨.
 */
chrome.omnibox.onInputEntered.addListener(function(command) {
	console.log("오리지날 명령 제출됨 : " + command);
	if (command == defaultCommand) {
		console.log(command + " 디폴트 커맨드가 " + commandForDefaultCommand
				+ "로 인식됨.");
		command = commandForDefaultCommand;
	}

	console.log("명령 제출됨 : " + command);

	if (command.indexOf("@") >= 0) {
		var mailAddress = command;
		console.log(mailAddress);
		sendMail(mailAddress);
	}

	else if (command === "option") {
		showOptionTab();
	}

	// 찾기
	else {
		if (command.indexOf("find:") == 0) {
			command = command.substring(5);
		}
		
		currentSearchWord = command;
		
		var tabId = chrome.tabs.create({
			url : chrome.extension.getURL("search.html")
		});
	}
});